package ca.etsmtl.log120.tp1.shapehierarchy;

import java.awt.Color;
import java.awt.Graphics;

/******************************************************
Cours : LOG120
Session : E2011
Groupe : 01
Projet : Laboratoire #2
Etudiants : Nicolas Blais Miko
 	 		Yohan Trepanier-Montpetit
Codes perm. : BLAN24079109
			  TREY
Professeur : Chamseddine Talhi
Charge de labo : Eric Goulet
Nom du fichier : Line.java
Date cree : 2011-05-18
Date dern. modif. 2015-05-23
 *************************************************** ****
Historique des modifications
 *************************************************** ****
2011-05-18 Version initiale (Nicolas Blais Miko)
2011-05-24 Implementation de drawShape() (Yohan Trepanier)
 ***************************************************/

/**
 * Classe permettant de representer une ligne
 */
public class Line extends AbstractShape{

	private static final int SHAPE_ID = 4;
	int pointX; 
	int pointY;
	private Color color = Color.blue;

	/**
	 * 
	 * CONSTRUCTEURS
	 * 
	 */

	/**
	 * Constructeur par defaut
	 */
	public Line(){}

	/**
	 * Constructeur parametrique
	 * @param nseq Le numero de sequence de la forme
	 * @param posX La position en X de la forme
	 * @param posY La position en Y de la forme
	 * @param pointX La coordonnee en X du second sommet de la ligne
	 * @param pointY La coordonnee en Y du second sommet de la ligne
	 */
	public Line(int nseq, int posX, int posY, int pointX, int pointY){

		super(nseq,posX,posY,SHAPE_ID);
		this.pointX = pointX;
		this.pointY = pointY;
	}

	/**
	 * Constructeur par copie d'objet
	 * @param l La ligne a construire
	 */
	public Line(Line l){

		super(l.getNseq(),l.getPosX(),l.getPosY(),SHAPE_ID);
		pointX = l.getPointX();
		pointY = l.getPointY();
	}

	/**
	 * 
	 * ACCESSEURS
	 * 
	 */

	public int getPointX() {

		return pointX;
	}

	public int getPointY() {

		return pointY;
	}

	/**
	 * 
	 * COMPORTEMENTS
	 * 
	 */

	/**
	 * Methode qui decrit une ligne avec une chaine de caractere
	 */
	public String toString(){

		return super.toString() + "Sommet #2: " + "(" + pointX + "," + pointY + ")" + " Type de forme: Ligne"; 
	}

	/**
	 * Methode qui retourne True si la ligne recue en parametre est identique a la ligne qui appel
	 * @param l La ligne avec laquelle on compare
	 * @return True si la les deux lignes sont identiques
	 */
	public boolean equals(Object obj){
		Line shape = (Line)obj;
		return super.equals(shape) && pointX == shape.pointX && pointY == shape.pointY;
	}

	public Line copyOf(){

		return new Line(this);
	}

	@Override
	public void drawShape(Graphics g2d) {
		g2d.setColor(color);
		g2d.drawLine(posX, posX, pointX, pointY);

	}

	@Override
	public double getAire() {
		// TODO Auto-generated method stub
		return getDistance();
	}

	@Override
	public int getHauteur() {
		
		return Math.abs(pointY-posY);
	}

	@Override
	public int getLargeur() {
		
		return Math.abs(pointX-posX);
	}

	@Override
	public double getDistance() {
		
		return Math.sqrt(Math.pow((double)getHauteur(), 2)+Math.pow((double)getLargeur(), 2));
	}

	@Override
	public void setPosition(int x, int y) {
	
		int largeur = getLargeur();
		int hauteur = getHauteur();
		
		posX = x;
		posY = y;
		pointX = x+largeur;
		pointY = y+hauteur;
	}
}
